草庐IT

Java Swingworker 和多线程

全部标签

c++ - 为什么同一内核(超线程)中的两个线程比两个内核的 L1 写访问权限更差?

我编写了一个c/c++程序(printf和std::的混合)来了解不同的缓存性能。我想并行化一个在大块内存上计算的进程。我必须对相同的内存位置进行多次计算,因此我将结果写到位,覆盖源数据。完成第一个微积分后,我会用之前的结果再做一个。我猜想如果我有两个线程,一个执行第一个微积分,另一个执行第二个,我会提高性能,因为每个线程完成一半的工作,从而使处理速度提高一倍。我已经阅读了缓存的工作原理,所以我知道如果做得不好,可能会更糟,所以我编写了一个小程序来衡量一切。(请参阅下面的机器拓扑、CPU类型和标志以及源代码。)我看到了一些奇怪的结果。显然,为了执行计算。如果我在同一个缓冲区或两个不同的

.net - 使用 __declspec(thread) 的线程本地存储在 C++/CLI 中失败

我正在开发一个项目,我们通过C++/CLI层混合.NET代码和nativeC++代码。在此解决方案中,我想通过__declspec(thread)声明使用线程本地存储:__declspec(thread)intlastId=0;但是,在第一次访问变量时,我得到一个NullReferenceException。更准确地说,声明是在ref类(用C++/CLI实现的.NET类)中完成的。我已经阅读过有关__declspec(thread)不适用于延迟加载的DLL的内容。如果我使用.NET,是否会自动使用延迟加载的DLL? 最佳答案 似乎_

C++ - 线程和多队列

我需要构建一个由工作人员(表示为线程)和(多个)队列组成的系统。个别作业在其中一个队列中等待,并等待工作线程处理它们。每个工作人员只能处理来自某些队列的作业。没有旋转等待。C/C++、pthreads、标准POSIX。我的问题是“多队列”。我知道如何用一个队列来实现它。工作人员需要等待他们可以处理的所有队列(等待其中的任何一个)。在Windows上我会使用WaitForMultipleObjects,但这需要是多平台的。我不需要任何特定的代码,只需要提示或我应该使用的模型的描述。提前致谢。 最佳答案 怎么样:所有工作线程都等待一个信

c++ - boost线程破坏多态性

拷贝:"purevirtualmethodcalled"whenimplementingaboost::threadwrapperinterface我正在尝试使用boost线程创建一个更加面向对象的线程版本。所以我创建了一个Thread类:classThread{public:Thread(){}virtual~Thread(){thisThread->join();}voidstart(){thisThread=newboost::thread(&Thread::run,this);}virtualvoidrun(){};private:boost::thread*thisThrea

c++ - mmorpg中的c多线程

我想在我的c++mmorpg中使用多线程,我现在有5个线程,我想将另一个线程一分为二,但是我的mmorpg服务器包含大量vector,并且因为vector不是线程安全的写,我做不好。是否有跨线程使用vector的替代方法,或者是否有办法使vector读/写多线程安全。这是一个我不想做的例子,尝试找到类似这样的替代方法:显然这不是实际代码,我只是举个例子。//Thread1//Loadmonsterandsenddatatotheplayerglobals::monstername[myid];//Myid=1fornow-.-senddata(globals::monstername[

c++ - 围绕 avcodec_open/close 的线程锁定

我有一个c++-cli代码,它使用capture从opencv中的文件夹捕获视频,然后使用cvqueryframe检索帧。然后我处理帧,一旦处理完所有帧,我就释放捕获。它工作正常但是当我尝试多线程时它给了我一个警告并且无法捕获文件夹中的一些视频并警告“avcodec_open/close()周围的线程锁定不足”。//foreachvideoinfolderdo{capture=cvCreateFileCapture(filename);while(1){img=cvqueryframe(capture)if!imgbreak;///processimg}cvreleasecapture

c++ - 在多线程中使用 libev

我想使用多线程的libev来处理tcp连接。我想要的是:主线程监听传入的连接,接受连接并将连接转发到工作线程。我有一个工作线程池。线程数取决于CPU的数量。每个工作线程都有一个事件循环。如果我可以在tcp套接字上写入或者如果可供阅读的内容。我查看了libev的文档,我知道这可以用libev完成,但我找不到任何示例我必须如何做到这一点。有人有例子吗?我认为我必须使用ev_loop_new()api,对于工作线程和主线程我必须使用ev_default_loop()?问候 最佳答案 下面的代码可以扩展到多线程//Thisprogramis

c++ - static const char [] 在类线程安全吗?

staticconst在类线程中是安全的吗?在下面的代码中,我有trailingBytesForUTF8,这是一个staticconst字符数组。可能有许多线程拥有它们自己的CConvertUTF类的对象实例。当多个线程同时访问同一个trailingBytesForUTF8数组时,是否会出现任何可变状态问题,或任何其他线程问题?另请注意,线程永远不会共享CConvertUTF类的相同对象实例。//.hclassCConvertUTFfinal{private:staticconstchartrailingBytesForUTF8[256];public:boolIsLegalUTF8S

c++ - 寻找对我的线程安全、无锁队列实现的批评

所以,经过一些研究,我写了一个队列。它使用固定大小的缓冲区,因此它是一个循环队列。它必须是线程安全的,而且我已尝试使其无锁。我想知道它出了什么问题,因为这些事情我自己很难预测。这是标题:templateclassLockFreeQueue{public:LockFreeQueue(uintbuffersize):buffer(NULL),ifront1(0),ifront2(0),iback1(0),iback2(0),size(buffersize){buffer=newatomic[buffersize];}~LockFreeQueue(void){if(buffer)delete

c++ - 在 C++11 中实现一个简单的通用线程池

我想创建一个线程池用于实验目的(以及有趣的因素)。它应该能够处理各种各样的任务(所以我可能会在以后的项目中使用它)。在我的线程池类中,我将需要某种任务队列。由于标准库提供了std::packaged_task由于C++11标准,我的队列看起来像std::deque>task_queue,所以客户端可以推送std::packaged_tasks通过某种公共(public)接口(interface)函数进入队列(然后池中的一个线程将收到条件变量通知以执行它,等等)。我的问题与std::packaged_task的模板参数有关在双端队列中。函数签名?()应该能够处理任何类型/数量的参数,因为